環境使用為Ruby 2.0.0 + Rails 4.0.0
這邊建議不要用sqllite,所以多加個gem 'mysql2'
app/config/database.yml設定
|
|
在 Gemfile
加入
|
|
接著bundle install
安裝Devise
$ rails g devise:install
建立Devise的User Model
$ rails g devise user
$ rake db:migrate
設定預設的URL選項
在config/environments/development.rb
加入config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
產生view
$ rails g devise:views
調整Route
devise 會自動加入 devise_for :users
接著自己指定一個 root ,例如root "application#index"
開一個view以後,
加入下列網址就有連結可以登入
|
|
複製進去就有登入介面了~
※ 有在用git可以備份一下
|
|
Devise 告一段落,接下來要接 Facebook啦
接著再參考
https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview 及
http://blog.xdite.net/posts/2011/12/06/omniauth-clean-auth-provider-4
因為前面已經將gem放入了,就直接下一步
加入第三方的欄位到user表內產生 Authorization Model
|
|
接著model設定個一對多
|
|
|
|
設定facebook資料
在 config/initializers/devise.rb
加入
|
|
若需要不同的授權如下
|
|
加入OmniAuth到User model
在 app/model/users.rb 的 devise後方加入 :omniauthable, :omniauth_providers => [:facebook]
也就是
|
|
調整Route
將Route內的 devise_for: 加入 controller,也就是
|
|
意思為只要收到的是 moniauth_callbacks型態 就指向 users controller的omniauth_callbacks method
可自行設定為
|
|
接收到的格式可參考
大概長這樣
|
|
接著建立model去處理接收的provider資訊
在 app/models/user.rb
底下新增 find_for_facebook_oauth method,這個方法 omniauth_callbacks_controller 會呼叫。
|
|
補上登出
|
|
OK,搞定,可以測試啦